Version history:
------- -------

 0.15.0 - Thu Mar  9 15:09:18 EST 2006
 	* Externally visible changes:
	  - On IBM POWER machines running Linux 2.6, USB device
	    location codes have a better chance of being correct.
	  - lsvpd no longer puts "/dev/" at the beginning of device
	    names in the AX field.
	  - lscfg now knows about the PR and FG fields.
	  - For SCSI device VPD, if SCSI inquiry-based VPD retrieval
	    fails then VPD is manufactured using sysfs (if available).
	    This works around a problem with some tape drives (or
	    their drivers) that don't allow inquiries when they are in
	    use.
	  - SCSI adapter channels with number 0xff are once again
	    listed.
	  - IBM virtual SCSI adapters now have a more sensible
	    description - the word "SCSI" should now only appear once.
	  - Added support for token ring adapters and communications
	    controllers.  The latter is implemented using new generic
	    PCI adapter support, which allows addition of new PCI
	    adapter types via a single line of code.  The list of
	    (partial) PCI classes that use this feature could later be
	    moved to a "configuration" file.
	* Internal changes:
	  - Core adapter VPD support reimplemented in C.  This was
	    largely a refactoring job with some new glue code.
	  - Removed helper programs pci_vpd_cap_grab and pci_lookup.
	    Renamed helper program adapter_pci_map to
	    adapter_pci_legacy.
	  - The lock directory used for retrieving PCI 2.2 VPD is now
	    alongside the database directory.  This stops the
	    possibility of multiple copies of update-lsvpd-db running
	    and getting confused while accessing the same PCI
	    configuration space.
	  - The PCI VPD parsing code code contained some historical
	    exits, which were causing overall failure when corrupt VPD
	    was encountered.
	  - SCSI device address validation is (once again?) performed
	    when retrieving VPD rather than when listing devices.
	  - Under Linux 2.6.16 sysfs, ad hoc backlinks like "block"
	    are disappearing, being replaced by class backlinks such
	    as "block:sda:".  Implemented some support for this,
	    including some guesswork.

 0.14.2 - Thu Dec 22 15:41:56 EST 2005
 	* Externally visible changes:
	  - Sort order of VPD for SCSI-like devices has changed
	    subtly.  YL is now at the end of the VPD, as for adapters
	    and other devices.
	* Internal changes:
	  - Tightened up channel handling code so it is less likely to
	    be confused by new nested class device subdirectories and
	    symlinks.
	  - device_handler renamed to node_handler.  Removed some of
	    the inherited functions, making them specific to
	    particular modules and separated out the generic stuff
	    from the device stuff.  Now ready to implementing adapter
	    support.
	  - ppc/powerpc and i386 packages now built using
	    cross-compiler.

 0.14.1 - Thu Nov 10 12:59:08 EST 2005
	* Externally visible changes:
	  - Adapters with PCI class 0x0104 will now be listed as "RAID
	    Bus Controller".  Devices will still be listed as "SCSI"
	  - On systems with a device-tree, adapter channels are once
	    again numbered according to their device-tree nodes
	    (rather than sequentially).  This fixes a regression
	    introduced in 0.14.0.  Additionally, channels numbered
	    0xff will not be processed.
	  - Improvements to MF handling for SATA/ATA devices.
	  - Updated pci.ids to 2005-11-14 daily snapshot.
	* Internal changes:
	  - Reimplemented pci_lookup.  It now uses
	    line_scanner_harness, which might one day do caching.

 0.14.0 - Mon Nov  7 09:18:26 EST 2005

	* Externally visible changes:
	  - USB storage devices are now officially supported.
	  - Descriptions (DS field in lsvpd) of devices now reflect
	    the type of adapter they are attached to.  So, while a
	    SCSI disk will still be reported as such, a SATA disk, for
	    example, will now be reported as "ATA Disk", although its
	    name will still reflect the sd* node assigned by Linux.
	  - On IBM POWER systems, ATA CD-ROM drives attached to
	    controllers that use libata-based drivers will now have
	    the correct location code reported.  This is because the
	    correct device-tree node is now located.
	* Internal changes:
	  - Merged bash part of adapter subsystem with device
	    subsystem.  Generalised a *lot* of code to do this, adding
	    a new level of consistency.  Much of the adapter VPD
	    retrieval code can now be easily rewritten in C using the
	    existing device_handler framework.  The adapter subsystem
	    needed to be reworked anyway to allow the above externally
	    visible changes to be implemented properly.
	  - The Linux 2.4 adapter code now behaves like an emulation
	    of the sysfs (Linux >= 2.6) code.  It is a little bit less
	    efficient in exchange for an improvement in code quality.
	  - device_handler now handles various SCSI-related subtypes,
	    such as DEVICE_SATA_TYPE, DEVICE_ATA_TYPE,
	    DEVICE_ISCSI_TYPE. 
	  - Added more sanity checking to the generic SCSI inquiry
	    code to stop non-compliant USB mass storage devices from
	    hanging.
	  - Combined the old pci_{scsi,ide,ethernet}_map programs used
	    under Linux 2.4 into a single new program called
	    adapter_pci_map.
	  - Improvements in the bash function multiplexing code.
	    Increased use of this code was causing high overheads.

 0.13.2 - Fri Sep 30 11:04:23 EST 2005
	* Externally visible changes:
	  - Unknown mass storage adapter now recognised as IDE for
	    driver "Promise_IDE" (as well as "Promise IDE").
	* Internal changes:
	  - Modified Makefile so overall build/install fails if
	    processing a subdirectory fails.
	  - Modified dmidecode output matching patterns to cope with
	    changes in dmidecode output format.

 0.13.1 - Fri Aug  5 08:45:03 EST 2005
	* Externally visible changes:
	  - Preliminary support for certain types of non-SCSI adapter
	    that use SCSI subsystem drivers: iSCSI, IDE.  Some
	    underlying code still needs to be updated so that devices
	    attached to these adapters can be recognised as iSCSI or
	    IDE, instead of being labelled as SCSI.
	  - Added support for minimal VPD for SCSI devices under Linux
	    2.6 from sysfs node when the sg driver is not available.
	* Internal changes:
	  - device_handler now support a device_print_parent_name
	    operation.  This has temporarily made things a little less
	    efficient, but is part of the plan for moving all of the
	    device functionality to C.
	  - For testing, can set location of sysfs directory using
	    LSVPD_SYSFS_DIR, which is used in preference to the mount
	    point returned by libsysfs.  Either way, if the specified
	    directory does not exist then sysfs support is not used.
	    Setting LSVPD_SYSFS_DIR to something like /no/such/dir
	    replaces the use of LSVPD_FAKE_NO_SYSFS.
	  - Fixed memory leak in SCSI inquiry code.
	  - For SCSI devices, do sanity check on EVPD page 0x00 before
	    trusting that it contains a valid list of EVPD page
	    numbers.
	  - device_functions_t now contains a supertype element, which
	    should be set by the base module for each component type.
	    This replaces the hardcoded supertype of
	    DEVICE_DEFAULT_TYPE for SCSI and IDE devices.  Much of the
	    infrastructure in device.[hc] should now be usable for
	    adapters and buses too.
	  - Numerous changes to fix gcc-4.0 warnings about (char *)
	    and (unsigned char *) variables being potentially
	    incompatible.

 0.13.0 - Fri Jun 24 14:13:37 EST 2005
	* Externally visible changes:
	  - sg_inq is no longer required (although sg_map is still
	    required under Linux 2.4).  libsgutils.a and libsysfs.a
	    are now build-time dependencies.
	  - Added support for SATA adapters that use the ata_piix
	    driver.
	  - Devices attached to SATA controllers now have their
	    manufacturer properly contructed (via the IDE code).
	    Disks attached to SATA controllers now have their serial
	    number listed (via a SCSI device template).
	  - Added some extra IDE TM -> MF items for devices starting
	    with "UJDA" (Matshita) and "IC25N" (Hitachi).
	  - Updated pci.ids to 2005-03-08.  One obvious difference
	    is that Intel's manufacturer string has changed subtly.
	  - Support for USB storage devices is temporarily removed.
	    It didn't work very well and had been hacked in for a
	    demonstration.
	* Internal changes:
	  - Merged C code that replaced much of the existing device
	    handling code.  Removed associated bash functions.
	    Interface to new C code is via new device_handler
	    executable.  See src/device_*.[ch].
	  - Refactored the add_device code.  add_device is now a
	    single function that calls 3 multiplexed functions.  While
	    doing this added exception code to the device listing
	    code, moving it out of add_device_scsi.
	  - For IDE devices, generating the manufacturer field from
	    the type/model field is now done using a data file called
	    ide_mf.map.
	  - vpd.{c,h} no longer uses the kernel's list.h but does its
	    own list handling, which is finally type-safe.
	  - Reorganised the lib, pci and scsi subdirectories into a
	    single src subdirectory.  Cleaned up a lot of code in the
	    process.
	  - Added facility to test (some) non-sysfs device code on
	    systems with sysfs by setting environment variable
	    LSVPD_FAKE_NO_SYSFS to a non-empty value.  This will
	    change in the future (see TODO).

 0.12.8 - Fri May 13 17:06:31 EST 2005
	* Externally visible changes:
	  - New command lsvio lists virtual adapters and devices on
	    pSeries Linux systems.
	  - Added support for sound cards.
	  - lsmcode now correctly tags the currently booted firmware
	    with (t) or (p) instead of just (b), if the serv_config
	    program from recent versions if ppc64-utils is available.
	  - Emulex cards are no longer blacklisted for PCI 2.2 VPD
	    retrieval.  This was implemented by removing
	    /lib/lsvpd/pci.vendor.blacklist - when this file is
	    missing no vendors are blacklisted.
	  - Under Linux 2.6, some Emulex fibre channel cards will now
	    list a firmware version.  This is currently listed
	    unmodified by lsmcode - this may need to be fixed.
	  - If environment variable $LSVPD_LIST_BUILTIN is set, lsvpd
	    will list certain items that are built-in, and may
	    otherwise be omitted.
	  - lscfg now wraps MF fields if required.
	  - IBM SCSI enclosures now have their serial number listed by
	    lsvpd/lscfg.
	  - Nightly cron job tidy_lsvpd_dbs now removes old database
	    archives if there are more than 10 of them and if they are
	    more than 30 days old.  Other cleanups of old databases
	    and links has also been implemented.  Also added some
	    sanity checks and did some cleanups.
	  - Fixed bug where buses on machines with Open Firmware
	    device-tree were numbered sequentially across all bus
	    types.  They are now numbered sequentially within bus
	    types.
	  - Adapter channels now have "Channel" appended to their name
	    and, in certain cases, the rest of the channel description
	    is simpler than it used to be.
	  - lscfg now lists SCSI enclosures before the devices they
	    contain.
	  - Limited support for ISA adapters on systems with an Open
	    Firmware device-tree.  This used to work, but that was due
	    more to luck than design.
	* Internal changes:
	  - lsvpd/lscfg/lsmcode/lsvio are now copies of a single
	    script.  All of the different logic is now in the modules.
	    This also involved rewriting the handling of the -z and
	    -d/D options.  Having 4 copies of the script is OK for
	    now, since it is small - later I'll probably do something
	    with links.
	  - Added locking around VPD 2.2 retrieval and RTAS dynamic
	    VPD retrieval.
	  - update-lsvpd-db now creates the top-level "db" link after
	    doing all other processing, and does this as atomically as
	    possible.  I'm still considering what to do about overall
	    locking.
	  - Under Linux 2.6, SCSI inquiries are now done against block
	    or tape devices in preference to generic devices.  This
	    avoids warnings about deprecated interfaces.  Internally,
	    this change also affected the way that SCSI device names
	    are determined under Linux 2.6, as well as minor changes
	    to the related code for Linux 2.4.
	  - Made the bus listing and adding functionality work
	    consistently with adapters and devices.
	  - New database subdirectory $db_state_dir used for sequence
	    numbers and global locks.

 0.12.7 - Thu Feb 24 17:00:35 EST 2005
	* Externally visible changes:
	  - Added support for serial adapters.
	  - lsmcode now incorporates ACARD firmware version for SCSI
	    DVD drives, if relevant.
	  - Display and serial adapters are now numbered starting from
	    0, because Linux doesn't even try to name them.
	  - lsvpd and lscfg no longer print a ZM field (containing a
	    LID) for SCSI disks.
	  - Updated documentation, including manual pages.  In
	    particular, the manual pages now mention adapter misnaming
	    under Linux 2.4 in a BUGS section.
	* Internal changes:
	  - Restructured device code into separate files, as best as
	    possible.
	  - Now uses a single top-level function to list devices, in a
	    similar fashion to adapters.
	  - After reading relevant kernel code, simplified the way the
	    device number is calculated for IDE devices on pSeries.
	    I believe I've done this carefully enough to avoid a
	    certain regression.
	  - Many code cleanups in lib/vpd.[ch], lib/util.[ch] and
	    scsi/scsi_vpd_render.c.  Some parts almost completely
	    rewritten.

 0.12.6 - Mon Jan 17 18:07:19 EST 2005
	* Externally visible changes:
	  - Blacklisted Emulex PCI adapters to avoid attempting to
	    retrieve PCI 2.2 style VPD from them.  There are numerous
	    possible firmware, driver and sysfs issues (although the
	    latest combination should fix these issues).
	  - Helper program pci_vpd_cap_grab will no longer wait
	    forever if the the adapter never sets the flag that says
	    there is VPD ready to read.
	  - Added some sanity checking to device cross-linking code.
	    Sometimes a linux,vpd directory would be created in /.
	* Internal changes:
	  - ibm_vpd_render now uses VPD lists as an internal structure
	    instead of text and does parsing via pci_vpd_parse.[ch].
	    There's quite a bit of new code here but it has been well
	    tested.

 0.12.5 - Mon Dec  6 13:59:31 EST 2004
	* Externally visible changes:
	  - Certain Promise IDE adapters and attached IDE devices were
	    no longer listed under Linux 2.6.  This is because the
	    adapters don't report a PCI class for an IDE adapter.
	    Fixed by adding a driver-based quirk entry.
	  - Fixed a bug where update-lsvpd-db reported that the
	    commands on_live_system and should_show_cached_vpd could
	    not be found.  These shell functions needed to be moved
	    into the common code area from the query-only code area.
	    This bug was reasonably harmless - no functionality should
	    have been lost.
	  - Updated pci.ids file.  This will be reflected in changed
	    output for some adapters.  They've finally updated subid
	    12ae/0001/1014/0104, so I no longer have to patch it.

 0.12.4 - Thu Dec  2 17:21:31 EST 2004
	* Externally visible changes:
	  - Adapters with channels that are separately named by the
	    operating system (e.g. IDE (ide0, ide1) or Serial ATA
	    (scsi0, scsi1, scsi2, scsi3)) no longer list just the
	    channels, repeating the VPD for each.  VPD is no longer
	    listed for the channels.  Instead the VPD is listed once
	    for a combined entry that covers all the channels in
	    question (e.g. ide0-1, scsi0-3).
	  - Manufacturerd VPD for Ethernet adapters now contains a NA
	    field, which is taken from the device-tree mac-address or
	    local-mac-address property when available.
	  - lsmcode prints LIDs for more disks.
	  - Added support for Serial ATA adapters and devices.
	  - Added manufacturer "Pioneer" for IDE devices.
	  - Fixed a bug in the Linux 2.4 SCSI adapter matching code.
	  - Some debug output can now be seen by setting $LSVPD_DEBUG
	    to true.
	  - To see stale dynamic VPD in offline mode,
	    LSVPD_FORCE_DYNAMIC should be set to "true".
	* Internal changes:
	  - Completely rewrote the list_adapter functionality when
	    sysfs is present.  On a modest system this and other
	    improvements have caused a speedup for update-lsvpd-db of
	    about 30% and the code is a lot cleaner.
	  - A lot of the channel checking code for adapters that was
	    scattered around the code has been removed, since
	    list_adapters now lists the adapter itself and any
	    channels.
	  - Functions do_adapter* renamed to add_adapter*.
	    add_adapter_DEFAULT is now common code.
	  - VPD "link" fields are now directories with a link in them,
	    along with a cached value.  This allows better error
	    handling and also some use in offline mode with
	    $LSVPD_FORCE_DYNAMIC.
	  - Removed all uses of functions readlink and
	    pseudo_realpath, and converted many other functions that
	    were called in subshells to shell functions that set a
	    variable as a side-effect.  The result is a lot less
	    subshells.
	  - Lots of code cleanups in preparation for rewriting
	    sections in C.  In particular, functions for setting YL
	    and DS fields for adapters and devices are much better -
	    YL now works properly on Mac G5, where there is a
	    device-tree but no ibm,vpd properties.  Also removed
	    multiplexing of certain functions where the multiplexing
	    wasn't being used.

 0.12.3 - Wed Oct 27 15:49:11 EST 2004
	* Externally visible changes:
	  - On pSeries, lsvpd no longer lists items that are built-in,
	    have no ibm,vpd property and have a location ending in
	    "P1".
	  - lscfg now interleaves (PCI and ISA) buses with attached
	    adapters.
	  - lsmcode now handles "lsmcode -r -d sys0" better.
	  - Ethernet and SCSI adapter matching is improved under Linux
	    2.4.  The relevant code has been completely rewritten in C
	    and contains extra heuristics.
	  - On pSeries, location codes for IDE devices should now be
	    correct under Linux 2.6.  The device-tree-specific code
	    was incorrect, so was accidently producing correct results
	    under Linux 2.4!  All relevant code is now more correct...
	  - Added support for virtual I/O adapters and devices on
	    pSeries.  These are listed by lscfg.
	* Internal changes:
	  - VPD node listing functions have been simplified with the
	    logic moved into overridable should_render functions that
	    now called in appropriate places in each query program.
	  - Sequence numbering for unmatched adapters now uses state
	    files, with locking, instead of global variables.  Done to
	    support hotplug.
	  - tdump now supports extra options to minimise
	    post-processing of output.
	  - Various functions moved between setup directories to
	    support hotplug.  Hotplug programs and functions still nt
	    installed.
	  - Cleaned up IDE device code, partly to avoid a bash bug.

 0.12.2 - Tue Sep 14 13:50:47 EST 2004
	* Externally visible changes:
	  - On Linux 2.4, ethernet adapters are more likely to be
	    named with their operating system names (rather than
	    eth501-style generated names).  The Linux 2.4 code that
	    matches the operating system name and device-tree node for
	    an adapter now uses an extra hint ((partial) bottom end of
	    memory range).  This is currently only used for ethernet
	    adpaters, which is where a bug was reported.
	* Internal changes:
	  - Changes relating to hotplug under Linux 2.6 for SCSI (and
	    USB storage) devices.  Should not cause any user-visible
	    changes.

 0.12.1 - Thu Aug 26 21:10:26 EST 2004
	* Externally visible changes:
	  - For multi-channel SCSI adapters, all VPD is now listed in
	    a parent entry, and the entries for the channels are now
	    included only to provide for a useful hierarchy.
	  - lscfg now lists lines corresponding to VK, CL, MI keywords.
	  - lsmcode now understands "-d sys0", and now prints all 3
	    firmware versions.
	  - In lsvpd, dynamic VPD is now marked as global if
	    appropriate.
	  - Unknown SCSI devices at host:255:255:255 are no longer
	    listed for SCSI adapters that use the ipr driver.
	  - Added backward compatibility module allowing query
	    commands to be run against old databases.
	  - Added IDE device vendor Hitachi.
	  - In offline mode, stale dynamic VPD will now be rendered if
	    $LSVPD_FORCE_DYNAMIC is 1 - useful for debugging.
	* Internal changes include:
	  - The /proc IDE code now depends on presence of file
	    /proc/ide/drivers, rather than /proc/ide/ide0.
	  - Initial hotplug support for IDE block devices and SCSI
	    devices.
	  - In offline mode, VPD value symlinks are no longer
	    followed.
	  - New module subdirectory common-post.d, processed after
	    more specific directories.  The module processing has now
	    been generalised using new global function do_setup.
	  - On non-device-tree systems, the main bus directory now
	    (mostly) follows the structure of /sys/devices/...

 0.12.0 - Tue Jun 22 14:52:16 EST 2004
	* This is a testing release that includes major internal
	  changes, including those required to properly support
	  hotplug (although the actual hotplug hooks have not been
	  implemented yet).  Please test it, but probably don't push
	  it to places that depend on it.
	* Externally visible changes:
	  - Renamed update-device-tree to update-lsvpd-db.
	  - lsmcode reports system firmware versions for new POWER5
	    machines.
	  - Dynamic VPD (obtained via RTAS on ppc64) is now listed.
	    lsvpd, lscfg and lsmcode will only render this VPD if
	    running as root and operating on default database (i.e. no
	    -d or -z flag given).
	  - Firmware version for SCSI adapters using ipr driver is now
	    totally dynamic on Linux 2.6 systems.  This uses field
	    aliases, implemented via symbolic links to sysfs.
	  - Support SCSI adapters using ipr driver under Linux 2.4.
	  - Implemented IBM converged location codes for SCSI and IDE
	    devices.
	  - Blacklist use of dmidecode on x86_64 - it seems broken.
	  - No longer use sg_scan command - under Linux 2.4 sg_map is
	    used instead (and under 2.6 sysfs is used).
          - YC field (subject to change, and not implemented on IBM
            pSeries) shows PCI adapter revision (from PCI
            configuration space, byte 8) - requires "dd".
	  - Extra SCSI disk templates added - lsmcode now prints LIDs
	    for more disks.
	  - Removed Linux 2.4 use of ifconfig to handle ethernet
	    adapters - now requires "ethtool" too, since adapter bus
	    addresses can't be found without ethtool.
	  - lscfg and lsmcode should be a lot faster now.  lsvpd might
	    be slightly slower.
	  - Removed lsmcode "-t" (test) option.  This option was
	    removed from lscfg some time ago, but it slipped through
	    the cracks in lsmcode.
	  - Miscellaneous bug fixes and documentation updates.
	  - Updated pci.ids to 2004-06-10 and applied AceNIC patch
	    (now submitted).
	* Internal changes include:
	  - Adapter and device enumeration and most operations now
	    involve bus addresses rather than operating system names.
	    This allows VPD to be retrieved/built before the operating
	    system assigns names for adapters/devices.  This means a
	    lot of code has changed.
	  - lsvpd, lscfg and lsmcode are now structured much more
	    similarly.
	  - VPD is now "directory-based": a file-per-field in a
	    directory (actually multiple directories).  This allows
	    fast, random-access to individual fields, while still
	    allowing sequential access via an ordering file called
	    ".lsvpd".  VPD is now accessed using a new, consistent
	    API.
	  - On systems with an Open Firmware device-tree, like IBM
	    pSeries, the device-tree now lives under bus/device-tree
	    and bus/pci contains aliases that point into the
	    bus/device-tree.
	  - A single program, scsi_vpd_render, is now used to render
	    SCSI VPD.  scsi_vpd_render creates directory-based VPD.
	    The template system now uses regexps instead of glob
	    patterns.
	  - ibm_vpd_render now creates directory-based VPD.
	  - PCI-related functions moved to new file scan.d/00pci from
	    scan.d/00minimal.  VPD creation functions also in new file
	    scan.d/00vpd.
	  - lscfg now avoids using fancy find options on IBM pSeries,
	    and now only uses options available in busybox's find.
	  - SCSI device support now attempts to modprobe "sg"
	    explicitly to encourage use of sysfs when available.
	  - New function ensure_directory helps avoid a lot of extra
	    forking that was done when gratuitously using "mkdir -p".
	  - basename and dirname functions are no longer called in
	    subshells - functionality is replaced by inline string
	    operations.
	  - IDE /proc code now tests for /proc/ide/ide0 - the old
	    check for /proc/ide would assume IDE was available even if
	    there were no useful IDE drivers loaded.
	  - Various changes to make the scripts more POSIX compliant.
	    They're not there yet and may never be, but gratuitous
	    bash-isms will be avoided where possible.

 0.11.5 - Thu Feb 26 16:04:28 EST 2004
	* Externally visible changes:
	  - Fixed some minor formatting glitches in lscfg relating to
	    blank lines around VPD.
	  - Added a "basics" section to install.{xml,html} and now
	    extract this into a top-level INSTALL file.
	* Internal changes:
	  - Added setup/scan.d/27device_scsi_sysfs to the distribution
	    tarball, so it is actually shipped.  This wouldn't have
	    caused any problems, but the new feature wasn't used (or
	    tested) on recent 2.6 kernels as advertised.

 0.11.4 - Thu Feb 19 18:52:57 EST 2004
	* Externally visible changes:
	  - lscfg now does neat fill of the description field for an
	    item, possibly starting it on the next line for better
	    alignment.  YL and Z? field values are also filled.
	  - Added override of RM field for adapters, since ipr driver
	    now provides fw_version property in sysfs class node.
	* Internal changes:
	  - Cleanups in PCI VPD rendering to avoid possible alignment
	    issues on some architectures.
	  - Optimisations.
	  - Split setup/scan.d/07device_scsi_sg into
	    07device_scsi_sg_inq and 07device_scsi_sg_scan, and added
	    setup/scan.d/27device_scsi_sysfs.  This means that under
	    Linux >= 2.6.2 sg_scan and sg_map are no longer needed.
          - Fixed a bug on non-pSeries SMP boxes, in the case where
            the value of TM for the machine falls back to the CPU
            type, and a line was being printed for each CPU, thus
            breaking lsvpd.

 0.11.3 - Thu Jan 22 15:14:42 EST 2004
	* Externally visible changes:
	  - Updated IBM generic SCSI disk template so manufacturer is
	    IBM*.  This means it matches things like IBM-PSG and
	    IBM-ESXS, which seem to be in use.
	  - Added manufacturers AOpen and Ricoh for IDE devices.
	  - lsvpd_test now always creates db-*.tgz in current
	    directory.  This makes my bulk testing script more useful.

 0.11.2 - Tue Jan 13 14:32:18 EST 2004
	* Externally visible changes:
	  - lscfg now unconditionally lists a "mem0" item.
	  - Several changes to the way lscfg options interact.  I'm
	    sure they used to do that the AIX version did (although I
	    could be wrong), but the current AIX version I tested
	    behaved (roughly) as below:
	    + -p no longer implies -v, so a platform specific section
	      without VPD can be generated.
	    + If using both -v and -p, VPD is only printed for items
	      that do not have an AX field (that is, they have no
	      operating system name) - the logic here is that the VPD
	      should have been printed in the standard configuration
	      section already.
	    + The -l option now causes filtering of the platform
	      specific section - this isn't quite right yet, but is
	      more useful than it used to be.  That is, the following
	      examples will produce usefully filtered configuration
	      and platform specific sections:
                lscfg -vp -l eth\*
		lscfg -vp mem0
	  - lscfg no longer has a -t (test) option.  I believe this
	    option was only used by me in early development.
	  - VPD lines that are empty or contain non-printable
	    characters are now omitted from lsvpd/lscfg output.  As a
	    side-effect, microcode/firmware versions containing
	    non-printable characters will no longer be shown by
	    lsmcode.  The overall effect of this change should be
	    minimal.
	  - Fibre channel adapters should now be listed as SCSI
	    adapters, since this is how Linux treats them.
	  - /lib/lsvpd/lsvpd_test now runs lsvpd with the -m option,
	    since this is likely to generate more interesting output.
	* Internal changes:
	  - Made code in a few places more readable, especially using
	    bash's "declare -i <var>" command.
	  - More optimisations using bash string substitutions instead
	    of sed.
	  - Fixed remaining copyright/license headers in files.
	  - Various SCSI functions that call external commands now use
	    debug_cmd to hide stderr instead of redirecting it to
	    /dev/null.

 0.11.1 - Wed Jan  7 13:51:25 EST 2004
	* Externally visible changes:
	  - lsvpd now supports -m option to mark VPD as global or
	    partition-private.
	* Internal changes:
	  - lsvpd_test no longer attempts to determine packaging
	    information if no email is to be sent.

 0.11.0 - Tue Jan  6 17:02:32 EST 2004
	* Externally visible changes:
	  - lscfg doesn't show items with "[NONAME]" anymore.  Such
	    items are now explicitly excluded from the output.
          - On some machines, PCI-2.2-style VPD is now included in
            output.
	  - Multi-channel SCSI adapters that have VPD may now have 3
	    entries listed: 1 for the adpater (e.g. scsi0) and 1 for
	    each channel (e.g. scsi0:0, scsi0:1).  Previously, the
	    adapter's VPD would possibly be listed as a "[NONAME]"
	    entry, and manufactured VPD would be listed for each
	    channel (and the VPD for each channel would be identical).
	    The new way of listing the information causes the minimum
	    amount of duplication and, for lscfg, the hierarchy is
	    correctly listed.
	  - Fibre channel adapters are now listed on pSeries machines,
	    although they are not yet given operating system names.
	  - Updated docs/design.{xml,html} to include information
	    about lsmcode and the database structure.
	  - New program /lib/lsvpd/lsvpd_test.  This script runs
	    update-device-tree, producing a trace file, and runs the
	    query commands with options that produce the most complete
	    output for each.  Output goes into files in the current
	    directory.  See README for more details.
	  - Fixed bugs in lsvpd, lscfg and lsmcode relating to -d (or
	    -D for lsmcode) and -z options.  Modules associated with
	    the current machine, rather than those associated with the
	    supplied database, were being loaded.  I'm not sure it
	    ever worked properly.
	  - Manufacturer "Lite-On" is now recognised for IDE devices.
	  - On sysfs-only machines (without OF device-tree -
	    non-pSeries), location strings for "pseudo" adapters have
	    changed.
	* Internal changes include:
	  - Restructured database, which is now under
	    /var/lib/lsvpd/db*.  Now has subdirectories "bus" and
	    "linux", with cross-links between the different views of
	    adapters and devices.  Temporary data is now stored in
	    appropriate places within the database, instead of under
	    subdirectories of /var/lib/lsvpd.  Many internal code
	    changes to support this.
	  - New setup directory query.d contains modules common to all
	    query commands.
	  - More optimisations where uses of sed have been replaced by
	    bash substitutions.
	  - lsvpd.spec and debian/changelog are now generated.

 0.10.4 - Tue Nov 25 15:15:20 EST 2003
	* Externally visible changes:
	  - lsmcode now prints information for some disks more like
	    the AIX version.  IBM SCSI disks with a model matching
	    DDYS-* or IC35L* now have the TM truncated and followed by
	    a value taken from INQUIRY page 0x03.  This is implemented
	    by putting the field into a ZM field, which is also
	    displayed by lsvpd and lscfg.  This field may change.
	  - On Linux 2.6, with sysfs, retrieval of PCI bus information
	    is now more reliable.  Related code has been reorganised
	    to fix a problem where SCSI (and other) adapters would not
	    be seen on systems without an Open Firmware device-tree.
	  - Documented (in docs/install.{xml,html}) strangeness that
	    occurs when a ServerWorks IDE controller is in use, but
	    the serverworks driver is not built-in to the kernel.
	* Internal changes:
	  - The stripkey() function, used by lscfg and lsmcode, has
	    been made much more efficient, resulting in a significant
	    performance improvement.
	  - The tdump command can now be used to read stdin.  This
	    required changes to the file_read_contents function.

 0.10.3 - Fri Nov 14 15:33:28 EST 2003
	* Externally visible change:
	  - New command lsmcode (and associated man page).  Initial
	    version: requires testing by those who know what it is
	    supposed to do!
	  - Fixed bug where PCI info for IDE devices would be missing
	    under Linux 2.6 (with sysfs).  This was reflected in the
	    location (YL) field in output.

 0.10.2 - Tue Nov 11 11:54:03 EST 2003
	* Minor bug fixes and improved documentation.
	* Externally visible changes:
	  - On Linux 2.4, Ethernet interfaces should now be correctly
	    numbered on Red Hat systems.  This is because ethtool will
	    now be used if it is in PATH (or /lib/lsvpd), rather than
	    using the hard-wired location /usr/sbin/ethtool.  ethtool
	    was not being used on Red Hat systems, because it resides
	    in /sbin.
	  - Reworked README, added docs/install.{xml,html} and
	    docs/design.{xml,html}.
	* Internal changes include:
	  - Debugging functions moved to separate file, so they can be
	    used by all programs.
	  - scsi_vpd_std now uses string_array structures, with
	    explicitly specified indices, for managing fixed strings.
	    This avoids possible bugs where a SCSI device might
	    contain weird "type" values that weren't mapped to a
	    string in the previous implementation.

 0.10.1 - Tue Oct  7 16:42:09 EST 2003
	* Bug fix release.
	* Externally visible changes:
	  - Adapters (and their devices) that use the ibmsis driver
	    should be visible again.  The SCSI host information file
	    had changed slightly.  Each channel is now listed
	    separately.  Hopefully this won't cause any problems.
	  - Fixed several bugs relating to PCI vendor/device string
	    lookup.  This was new functionality.  Most of the problems
	    were visible on non-CHRP systems running Linux 2.6.
	  - All IDE devices with a model string starting with "IBM"
	    (as opposed to "IBM-" are now assigned the manufacturer
	    "IBM".
	  - CPU count on non-CHRP machines should be fixed.
	  - Initial manual pages for lsvpd and lscfg are now included.
	* Internal changes:
	  - Split proc-ide, sg-scsi and ethernet scanning modules into
	    separate modules for basic definitions, handling adapters
	    and handling devices.  This is the fix for the problem in
	    0.10.0 where IDE adapters would be mis-labelled if the
            system didn't support IDE.  Added a load condition for the
            various pieces of SCSI code.  Things are now much cleaner.


 0.10.0 - Fri Oct  3 14:43:25 EST 2003
	* This release includes some major reorganisations and
	  additional functionality.  Please test it before trusting
	  it.  There are relatively few changes to low-level code -
	  any errors introduced by this code reorganisation should not
	  be subtle...  :-)
	* Externally visible changes:
	  - IDE adapters and devices are now supported.
	  - SCSI and Ethernet adapter VPD that is synthesised from the
	    device-tree now has MF and TM fields, where possible
	  - Should be able to recognise pSeries CHRP systems more
	    reliably by looking at the device-tree device_type
	    property.
	  - lscfg now does a better job of reporting architecture and
	    CPU (UP/SMP) information for non-CHRP systems.
	  - The sort order of items in lscfg output is now better.
	    Devices should appear under their corresponding adapters.
	    The fix in 0.9.1 has been improved.
	  - lscfg no longer prints comments to stderr about unknown
	    keys in VPD.
	  - C utilities now produce more useful error messages in many
	    cases.
	  - On systems with Open Firmware device-trees, YL fields
	    contain PCI+SCSI/IDE bus information as appropriate.
	* Internal changes:
	  - The behaviour of the (internal) utility
	    (/lib/lsvpd/)pci_lookup has changed.  It now only ever
	    prints a vendor string or a device string, not both.  It
	    also handles subvendor and subdevice codes (and PCI device
	    class codes).  Calling code has been changed to reflect
	    this.
	  - The update-device-tree script is now much slimmer - most
	    of the code (especially SCSI code) has been moved to
	    modules in the setup/scan.d directory.
	  - update-device-tree now uses a function multiplexing scheme
	    to make the code cleaner - fewer case statements are
	    needed.  See setup/scan.d/000minimal for details.

 0.9.2  - Mon Sep 22 10:44:54 EST 2003
	* This is a bug-fix release.  There are no new features or
	  major changes.
	* lscfg -d option was broken due to a typo.
	* lsvpd/lscfg -z option was broken due to a historical use of
	  the $dt variable.  The variable $dt has now been completely
	  removed and has been replaced by $db.  Ironically, $dt was
	  being kept for backwards compatibility!
	* In various places, globbing needed to be turned off, instead
	  of just being restricted.  This caused the occasional
	  bizarre error.
	* lsvpd and lscfg now run with nullglob.  This primarily
	  affects sourcing of files from the setup directories.  As a
	  result 000EMPTY files are no longer needed.
	* On non-pSeries architectures, lsvpd failed to show a system
	  identifier due to a typo.
	* Installation of files under the setup directory is now
	  handled more cleanly, and the 000EMPTY files are no longer
	  installed.

 0.9.1  - Mon Sep  1 15:02:54 EST 2003
        * The output from lsvpd and lscfg is sorted a little better.
          The main visible difference is that SCSI devices will now
          appear just after the adapter they're attached to (as in
          AIX), not (usually) before.
        * Fixed typo in parsing of sysfs PCI information.  There was
          an error in a sed expression.

          Note that without sysfs, update-device-tree depends on
          lspci, which tends to be broken under 2.6 at the moment, so
          update-device-tree will fail.  If you want
          update-device-tree to work well, mount sysfs (probably at
          /sys).

 0.9.0	- Fri Aug 22 15:49:41 EST 2003
	* This is strictly a test release.  It includes a large number
	  of sweeping changes.  Breakage is expected.
        * The main scripts (update-device-tree, lsvpd, lscfg) are now
          modular.  Many of the shell-functions from
          update-device-tree and scripts in the pci and scsi
          subdirectories have been pushed into setup files in
          subdirectories of the new "setup" directory.  These setup
          files are installed into directories call common.d, scan.d,
          lsvpd.d, lscfg.d under /lib/lsvpd.  They are conditionally
          loaded at run-time depending upon the availability of system
          features such as sysfs, /proc/device-tree and devfs.  As a
          result, commands (particularly update-device-tree (now
          misnamed)) now run on a variety of different machines,
          producing differing types and amounts of output.  Output on
          pSeries systems with an Open Formware device-tree should be
          largely unchanged.
	* C programs no longer use glib.  Only a small amount of code
	  had to be written to avoid this, so it was worthwhile.
	  There were some cases where the code was simplified
	  enourmously because I wasn't trying to shoehorn in the use
	  of glib functions.  Also used valgrind to discover a lot of
	  malloc/free problems.
	* sysfs support added for Linux >= 2.6.  Provides much better
	  support for things like adapter listing and matching
	  (identification of PCI bus information).  As a result,
	  useful output is possible on systems without an Open
	  Firmware device-tree.
	* If /usr/sbin/ethtool is installed, update-device-tree will
	  now match ethernet interface names to device-tree nodes.
        * New program "pci_lookup" prints strings corresponding to PCI
          vendor and device ids.  Used by the sysfs code.
        * Added -d (debug) flag to update-device-tree to provide some
          verbose output.  As a side-effect, when update-device-tree
          encounters certain unknown situations it will no longer
          print warnings to stderr - it will fail silently instead.
          These messages will be seen if the -d flag is used.
          This is more appropriate for production systems.
	* PCI parsing code used by ibm_vpd_render no longer builds a
	  parse tree.  Instead it generates textual VPD on the fly.
	  As a result pci/ibm_vpd_to_txt.[ch] are no longer part of
	  the distribution.
        * dt_find_adapter, scsi_host_pci_info are now shell functions
          in the setup code, instead of a separate script.
	* pci.ids is now part of the distribution (taken from
	  2.6.0-test3).  I need to check the distribution conditions,
	  but it is distributed with other GPLed software (such as
	  pciutils).  It is being included with lsvpd so it can be
	  easily installed under /lib/lsvpd on the root filesystem (as
	  opposed to somewhere like /usr/share/pci.ids, which mightn't
	  be available).

 0.8.7  - Tue Jul 22 11:28:41 EST 2003
	* scsi/scsi_vpd_std.c now prints all known CD-ROM device
	  sub-types (such as "SCSI DVD-RAM Drive") in the description
	  (DS) field.
	* update-device-tree now uses new function sysfs_dir to
	  determine mount point of sysfs by checking in /proc/mounts,
	  instead of assuming that if /sys exists, sysfs is mounted
	  there.
	* Updated templates in scsivpd.conf.  Template that used to
	  match CDRM00203 now matches *RM00203, so it is now used for
	  the DVRM00203 DVD-RAM drive as well - this wildcard could be
	  further loosened if I find out more information about IBM
	  CD-ROM-like drives.  New template for
	  "EXABYTE;tape;IBM-20GB".
	* Check for extraneous arguments (without flags) to
	  lsvpd/lscfg.  This avoids doing things like:

	      lscfg -v sda

	  and seeing output for all items (and wondering what
	  happened).
	* Removed scsi/scsi_vpd_inquire and scsi/scsi_vpd_render from
	  .distfiles and added scsi/scsi-functions.bash.  The
	  functionality of those scripts has been moved to shell
	  functions.

 0.8.6  - Wed Jul  2 13:05:09 EST 2003
	* update-device-tree now uses separate functions to list items
	  and individually process them.  For example,
	  ethernet_match_adapters has been replaced by
	  ethernet_list_adapters and ethernet_match_adapter.  The idea
	  is that the functions that process individual items should
	  be useful to use in hotplug, when that is eventually
	  required, and will eventually be separated out into a
	  library that can be used by other scripts.
	* As a result of the above, scsi/scsi_vpd_scan is no longer
	  used and has been removed from the distribution
	* Display adapters now have synthesised names (500+).
	* lscfg now displays disk sizes when devfs is used.  As a
	  result of these changes, the new lscfg may not display any
	  disk sizes (at all, on any system) until the new
	  update-device-tree is run.
	* Distribution tarballs are now in the TARBALLS subdirectory,
	  instead of cluttering the top level directory.
	* update-device-tree no longer accepts the (previously
	  undocumented) arguments telling it where to find partially
	  processed device-tree and SCSI information.  There are now
	  too many external commands run by update-device-tree for
	  this to work sensibly.  These options were used in early
	  testing.
	* See the ChangeLog for more details, including various
	  cleanups and optimisations.

 0.8.5  - Tue Jun 17 14:54:11 EST 2003
	* If /sys exists (Linux 2.5 and above), SCSI and Ethernet
	  adapters are now matched to device-tree nodes using
	  information in /sys.
	* lsvpd and lscfg now accept a -z option, allowing a .tar.gz
	  archive to be passed instead of a device-tree.  This is
	  useful for debugging and for looking at the archives created
	  by the cleanup script below.
	* New script /lib/lsvpd/tidy_device_trees, designed to be run
	  from a daily cron job.  This removes adjacent (by
	  modification time) directories that are identical and
	  replaces them with symbloic links.  Identical groups other
	  than the most recent are archived into .tar.gz files.
	  Colons are also removed from the names of some old
	  device-tree directories.
	* dt_find_adapter now accepts a PCI domain as its 2nd
	  argument; all other arguments get shuffled down a position.
	  The dom, bus, dev, fun arguments are now hexadecimal.
	* Makefile cleanups and additions.
	* gcc-3.2 compiler warnings cleaned up.

 0.8.4  - Wed May  7 12:07:20 EST 2003
	* scsi/scsihost.conf: fixed typo in bus pattern for sym53c8xx.
	  This caused it to fail on systems using the sym53c8xx with a
	  SCSI host adapter on a bus with a non-zero number.  That is,
	  a lot of systems!

 0.8.3  - Tue Apr 29 16:07:44 EST 2003
	* scsi/scsihost.conf: loosened the pattern for the ibmsis PCI
	  bus number so it can be more than 2 digits.

 0.8.2	- Tue Apr 29 14:56:44 EST 2003
	* Only user visible change should be that ibmsis SCSI driver
	  should be supported.
	* scsi/scsi_host_pci_info.in now understands prefix fields and
	  does conversions, (from octal and hex to decimal).
	  Also, get_real_bus is only called if no IRQ is found.
	* scsi/scsihost.conf: added comment about prefix field 6-9;
	  added explicit anchors in patterns for sym53c8xx driver;
	  added patterns and prefixes for ibmsis driver.
	* Simplified hex2dec and dec2hex in lib/lsvpd-functions.bash.
	  They now just use the bash printf function.
	* Minor optimisations in dt_find_adapter.in.

 0.8.1	- Fri Mar 28 19:30:38 EST 2003
	* Fixed quoting error in lscfg that was causing VPD keys or
	  values that matched filenames in the current directory (via
	  glob expansion) to expand to list of filenames.

 0.8.0	- Fri Mar 28 19:06:54 EST 2003
	* update-device-tree received quite a facelift to facilitate
	  synthesis of linux,vpd properties for SCSI and Ethernet
	  adapters. 
	* Slight formatting changes to lscfg to make it match AIX more
	  closely.
	* Added ISA buses to lscfg output.
	* lscfg only prints VPD for nodes where ibm,vpd and linux,vpd
	  exist.

 0.7.2	- Thu Mar 27 12:33:09 EST 2003
	* lscfg now prints some field label descriptions differently
	  in the PLATFORM SPECIFIC section and the main VPD section.
	* lscfg no longer accepts the -s option.  This was only
	  necessary because the disk-sizes file lived in the
	  associated directory.  device-tree/linux,disk-sizes is now
	  used instead.  This means that -d can be more easily used
	  to view old or offline configurations.
